#include<bits/stdc++.h>
#define ___ "-------------------------------\n"
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ll maxn = 100000 + 5;

class Solution {
public:
    string addBinary(string a, string b) {
        string ans = "";
        int i = a.length();
        int j = b.length();
        i--;
        j--;
        char carry = '0', res = '0';
        while (i >= 0 || j >= 0) {
            char temp;
            if (i < 0) {
                temp = b[j--] + carry - '0';
            } else if (j < 0) {
                temp = a[i--] + carry - '0';
            } else {
                temp = a[i--] + b[j--] + carry - (2 * '0');
            }
            switch (temp) {
                case '0' :
                    res = '0';
                    carry = '0';
                    break;
                case '1' :
                    res = '1';
                    carry = '0';
                    break;
                case '2' :
                    res = '0';
                    carry = '1';
                    break;
                case '3' :
                    res = '1';
                    carry = '1';
                    break;
            }
            ans += res;
        }
        if (carry == '1') {
            ans += '1';
        }
        reverse(ans.begin(), ans.end());
        return ans;
    }
};

int main(){
//    ios::sync_with_stdio(false);
//    ifstream cin("data.txt");
//    freopen("data.txt", "r", stdin);
    Solution a;
    cout << a.addBinary("11", "10") << endl;
    system("pause");
    return 0;
}

/**
 * @date 2022-09-13
 * @brief 模拟加法运算，总的来说这种问题主要注意两点：
 *      1. 两个数字长度不一样的时候的处理
 *      2. 【进位】 和 【当前位和】
 */